﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Classes
{
	public class ModificaScoring 
	{
		public ModificaScoring(DBVehiculos dbvehiculos, DBClientes dbclientes, DBScoring dbScoring) //le agregue la dbScor. para persistir los nuevos
		{
			Console.Clear();

			Vehiculo v;
            Cliente c;
            string dni;
            string patente;

            do
            {
                do
                {
                    Console.Write("Ingrese Dni: ");
                    dni = Console.ReadLine();
                }
                while (!ValidarDNI(dni));

                c = dbclientes.GetCliente(dni); //busco el cliente. Queda validar que exita 

                if (c == null)
                {
                    Console.WriteLine("Cliente Inexistente");
                    Console.WriteLine();
                    Console.WriteLine("Volver a Intentarlo ??? (S)i, (N)o");
                    if (!PreguntaSiNo())
                        return;
                }

            }
            while (c == null);

            Console.Clear();
			Console.WriteLine("Listado de Vehiculos del cliente: " + c.Apellido + ", " + c.Nombre);
            Console.WriteLine();

			foreach (Vehiculo vehiculo in c.ListVehiculo)
			{
				Console.WriteLine("Patente: " + vehiculo.Patente + "   Marca: " + vehiculo.Marca + "   Modelo: " + vehiculo.Modelo);
			}

            do
            {
                do
                {
                    Console.Write(" Ingrese la Patente: ");
                    patente = Console.ReadLine();
                }
                while (!ValidarPatente(patente));

                v = null;

                //acá busco el vehiculo con la patente ingresada en el cliente, no en la DB vehiculos
                v = c.getVehiculo(patente);

                if (v == null)
                {
                    Console.WriteLine("Vehiculo Inexistente");
                    Console.WriteLine("");
                    Console.WriteLine("Volver a Intentarlo ??? (S)i, (N)o");
                    if (!PreguntaSiNo())
                        return;
                }

            }
            while (v == null);
            
           	if (v.Scoring==null)
                
                Console.WriteLine("El vehiculo no tiene cargado un scoring ");
            else

			Console.WriteLine("El vehiculo posee el scoring:  " + v.Scoring.Nombre + "  con un descuento de " + v.Scoring.Descuento.ToString() + "%");

			string option;

            Console.WriteLine("Desea modificarlo? (S)i, (N)o: ");

            if (PreguntaSiNo())
            {
				string nombre;
				do
				{
					Console.WriteLine("Ingresar Nombre: ");
					nombre = Console.ReadLine();
				}
				while (nombre.Length == 0);

				int descuento = -1;

				do
				{
					try
					{
						Console.WriteLine("Ingrese % de descuento: ");
						descuento = int.Parse(Console.ReadLine());
					}
					catch (Exception)
					{
						Console.WriteLine("No es un nro");
					}

				}
				while (descuento == -1);

               
                //Scoring scNuevo = new Scoring(nombre, descuento); mariana 1.11

				
				try
				{
                    v.Scoring.Nombre = nombre; //se lo modifica al auto correspondiente
                    v.Scoring.Descuento = descuento;
                    dbScoring.guardarDB(v.Scoring); //se "persiste" en la base.
				}
				catch (Exception ex)
				{
					Console.WriteLine(ex.Message);
					Console.ReadKey();
					return;
				}

              
				Console.WriteLine("El Scoring ha sido guardado y asignado al vehiculo correctamente");
				Console.ReadKey();
			}
		}


        public bool ValidarDNI(string dni)
        {
            if (Regex.Match(dni, @"^[0-9]?[0-9][0-9][0-9][0-9][0-9][0-9][0-9]$").Success)
                return true;
            Console.WriteLine("DNI invalido, por favor ingrese un DNI Valido:");
            return false;
        }


        public Boolean PreguntaSiNo()
        {
            ConsoleKeyInfo tecla;
            string resultado;

            do
            {
                tecla = Console.ReadKey(true);
                resultado = tecla.KeyChar.ToString();
            }
            while (!(resultado == "S" || resultado == "s" || resultado == "N" || resultado == "n"));

            if (resultado == "S" || resultado == "s")
                return true;
            else //mepa q faltaba. Mariana
                return false;
        }


        public bool ValidarPatente(string patente)
        {
            if (Regex.Match(patente, @"^[A-Z][A-Z][A-Z]|[a-z][a-z][a-z][0-9][0-9][0-9]$").Success)
                return true;
            else
            {
                Console.WriteLine(" LA PATENTE INGRESADA ES INCORRECTA, POR FAVOR INGRESE UNA PATENTE VALIDA");
                return false;
            }
        }
	}
}
